【k8s学习笔记三】kubernetes本地环境部署测试

您所在的位置:网站首页 nacos k8s部署 【k8s学习笔记三】kubernetes本地环境部署测试

【k8s学习笔记三】kubernetes本地环境部署测试

2023-07-04 17:53| 来源: 网络整理| 查看: 265

|本文记录在macbook下通过部署minikube来构建一个简单的kubernetes环境,并通过k8s来管理部署一个简单的node应用。

0 准备工作docker on macnode一 安装minikube

参考:https://minikube.sigs.k8s.io/docs/start/,二进制下载安装:

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-arm64 sudo install minikube-darwin-arm64 /usr/local/bin/minikube

或homebrew安装:

brew install minikube brew unlink minikube brew link minikube

如果安装后执行minikube找不到minikube,可以在~/.zshrc中增加别名:

alias minikube='/opt/homebrew/Cellar/minikube/1.30.1/bin/minikube'

启动minikube

minikube start

| 注意:如果使用Minikube,而不是将Docker镜像push到registry,需要执行,否则在职行后续docker build命令时会遇到repository does not exist or may require ‘docker login’报错

eval $(minikube docker-env)二 node测试

新建一个node目录,编写app.js

const http = require('http'); //const hostname = '127.0.0.1'; const port = 3000; const os = require('os'); const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end(`Hello World!`); }); //server.listen(port, hostname, () => { server.listen(port, () => { //console.log(`Server running at http://${hostname}:${port}/`); console.log(`Server running at http fank`); });

测试效果:

node app.js三 创建docer镜像

在同样目录下编写Dockfile,

FROM node:slim EXPOSE 3000 COPY app.js . CMD node app.js

创建本地镜像

docker build -t hello-node:v1 .

查看镜像

docker image ls

删除镜像:

docker rmi 四 创建pod

有多个方式,通常使用deployment可以间接生成pod,但先介绍直接创建pod的办法,即用yaml文件创建pod

编辑 hello-pod.yaml

apiVersion: v1 kind: Pod metadata: name: hello-node labels: app: hellonode spec: containers: - name: hello-node-container image: hello-node:v1 ports: - containerPort: 8080 protocol: TCP

执行 kubectl create -f hello-pod.yaml进行创建

查看pod

kubectl get pods 或 kubectl get po -A

查看pod的描述

kubectl describe pod hello-node五 deployment介绍

chatgpt给出的deployment简介:

定义deployment的yaml文件:

apiVersion: apps/v1 kind: Deployment metadata: name: hello-node-deployment spec: replicas: 3 selector: matchLabels: app: hello-node template: metadata: labels: app: hello-node spec: containers: - image: hello-node:v2 name: hello-node ports: - containerPort: 3000

创建deployment:

kubectl create -f hello-nd-deployment.yaml

查看:

kubectl get deployments

查看详细描述

kubectl describe deployment hello-node-deployment六 使用service对外暴露服务

在 Deployment 生效后,可以使用 Kubernetes 中的 Service 对象来将服务暴露给外部。Service 为 Pod 提供了稳定的网络终结点,并通过负载均衡将流量路由到后端的 Pod 上。

创建service的yaml

apiVersion: v1 kind: Service metadata: name: hello-service spec: type: LoadBalancer selector: app: hello-node ports: - protocol: TCP port: 80 targetPort: 3000

启用服务

kubectl apply -f hello-svc.yaml 查看服务 kubectl get service

浏览器测试

minikube service hello-service

也可以通过端口转换进行连接

kubectl port-forward service/hello-service 2000:80七 更新代码并发布

修改app.js,让代码可以打印服务端pod的IP

const http = require('http'); //const hostname = '127.0.0.1'; const port = 3000; const os = require('os'); function getIP(){ var interfaces = os.networkInterfaces(); for (var devname in interfaces){ var iface = interfaces[devname]; for (var i = 0; i < iface.length; i++){ var alias = iface[i]; if(alias.family === 'IPv4' && alias.address !=='127.0.0.1' && !alias.internal) { return alias.address; } } } } const ip=getIP() const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end(`Hello World! Address is ${ip}`); }); //server.listen(port, hostname, () => { server.listen(port, () => { //console.log(`Server running at http://${hostname}:${port}/`); console.log(`Server running at http fank`); });

更新镜像:

docker build -t hello-node:v2 .

修改deployment的yaml

更新deployment

kubectl apply -f hello-nd-deployment.yaml

遗留问题:

上面service的类型为LoadBalance,共绑定了3个pod,但是在浏览器请求服务时返回的为一个固定的pod ip,负载均衡的效果未体现出来。查询相关信息后可能的原因如下:

1《kubernetes in action》的解释

回话亲和性问题,浏览器使用的keep-alive连接,并通过单个连接发送所有请求,所以响应为同个pod , 解释来源为

2 ChatGpt的解释

Minikube 在本地环境中模拟 Kubernetes 集群,并提供了一些默认的 Service 类型支持。然而,并非所有的 LoadBalancer 类型都能在 Minikube 上正常工作,因为这需要底层基础设施支持。您可以使用 minikube addons list 命令来查看已启用的插件和可用的功能。

由于本地PC环境和云端实际环境有差异,该问题未进一步深究,后续在云上使用真实环境进一步验证

k8s学习笔记合集:

【k8s学习笔记一】容器及Docker基础

【k8s学习笔记二】腾讯云harbor私有仓库部署实践

【k8s学习笔记三】kubernetes本地环境部署测试



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3